package Heroes;

import java.util.Iterator;
import java.util.LinkedList;

import Disparos.DisparoHielo;
import Interfaz.RepresentacionGrafica;
import Juego.Tablero;
import TDAMapeo.InvalidKeyException;
import Villanos.Villano;

public class HeroeRealentizante extends Heroe {

	
			/**
			 * Constructor de la clase
			 * @param t Tablero
			 */
			public HeroeRealentizante(Tablero t) {
				super("HeroeRealentizante", 250, 20,10 , t, 30);
				try {
					component=new RepresentacionGrafica(tablero.getMapeo().get("HeroeRealentizante"), 0,0);
				} catch (InvalidKeyException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			
			/**
			 * Permite reducir la velocidad del villano
			 * @param atac Villano a reducir la velocidad
			 */
			protected void atacarVillano(Villano atac) {
				d=new DisparoHielo(posicion+120, altura+20,tablero);
				int i=5000;
				
				component.setAtacando();
				component.setLocation(posicion-10, altura-4);
				try {
					Thread.sleep(1100);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				tablero.getPanel().add(d.getRepresentacion());
				d.getRepresentacion().setVisible(true);
				try {
					rep.p(tablero.getMapeoSonidos().get(nombre));
				} catch (InvalidKeyException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				component.setComun();
				component.setLocation(posicion, altura);
				
				while ((tablero.getVida()>0) && atac!=null  && atac.getPosicion()-d.getPosicion()>-10 && vida>0)
				{
					d.setPosicion(d.getPosicion()+50);
					d.getRepresentacion().setLocation(d.getPosicion(),d.getRepresentacion().getY());
					try {
						Thread.sleep(600);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					i-=200;
				}
				
				d.getRepresentacion().setVisible(false);
				tablero.getPanel().remove(d.getRepresentacion());
				d=null;
				if (atac!=null){
						atac.reducirVida(ataque);
						if (atac.getVelocidad()>2)
							atac.setVelocidad(atac.getVelocidad()-2);}
				if ((atac.getVida()<=0)&& (atac!=null)){
				atac.eliminar();
				atac=null;}
				try {
					Thread.sleep(i);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			/**
			 * Permite clonar al heroe
			 */
			@Override
			public Heroe clonar() {
				return new HeroeRealentizante(tablero);
			}

			/**
			 * Accion llevada a cabo por el heroe
			 */
			@Override
			protected void accion() {
				Villano atac=null;
				boolean encontre=false;
				LinkedList<Villano> lista=tablero.getFilaVillanos(fila);
				if (!lista.isEmpty()&& vida>0)
				{
					Iterator<Villano> it=lista.iterator();
					if (it.hasNext())
						atac=it.next();
					while(it.hasNext() && !encontre)
					{	Villano v1=it.next();
						if ((v1.getPosicion()>posicion) && v1.getPosicion()<=atac.getPosicion()){
								atac=v1;
								encontre=true;}
					}
					if (atac.getPosicion()>posicion)
						atacarVillano(atac);
				}
				
			}

		}
